package com.clever.mall.mapper;

import com.clever.mall.commons.result.MessageAttentionResult;
import com.clever.mall.commons.result.MessageOrderResult;
import com.clever.mall.entity.TradingRecord;
import com.clever.mall.entity.User;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @author ChenWang
 * @interfaceName UserSocialContactMapper
 * @date 2020/11/09 18:49
 * @since JDK 1.8
 */
public interface UserSocialContactMapper {
    /**
     * 查询指定用户的粉丝数
     * @param user  指定用户
     * @return  粉丝数
     */
    int selectFans(@Param("user") User user);
    /**
     * 查询指定用户的粉丝
     * @param user  指定用户
     * @return  粉丝集合
     */
    List<User> selectFansList(@Param("user") User user);

    /**
     * 查询指定用户的关注用户的数量
     * @param user  指定用户
     * @return  关注数
     */
    int selectAttention(@Param("user") User user);

    /**
     * 查询指定用户的关注
     * @param user  指定用户
     * @return  关注集合
     */
    List<User> selectAttentionList(@Param("user") User user);

    /**
     * 查询未查看的指定的类型信息
     * @param user  指定的用户
     * @param msgType 0表示fromUser关注toUser，
     *                1表示fromUser取消关注toUser，
     *                2表示fromUser购买toUser的商品
     * @return  未查看的指定类型的信息数目
     */
    int selectNotViewMessageByMsgType(@Param("user")User user, @Param("msgType")Integer msgType);
    /**
     * 查询指定用户所有未查看的信息数量
     * @param user  指定的用户
     * @return  未查看的信息的数量
     */
    int selectAllNotViewMessage(@Param("user")User user);

    /**
     * 查询指定的用户的关注信息
     * @param user  指定的用户
     * @return      关注信息集合
     */
    List<MessageAttentionResult> selectAttentionByUser(@Param("user")User user);

    /**
     * 查询指定的用户的商品销售-被购买信息
     * @param user  指定的用户
     * @return      购买信息集合
     */
    List<MessageOrderResult> selectOrderByUser(@Param("user")User user);

    /**
     * 查询该用户是否关注了指定用户
     * @param user          该用户
     * @param otherUser     指定用户
     * @return              0表示没有关注，1表示关注了
     */
    int selectAttentionRelation(@Param("user") User user,@Param("otherUser") User otherUser);

    /**
     * 查询该用户是否关注过指定用户
     * @param user          该用户
     * @param otherUser     指定用户
     * @return              0表示不存在关注信息,1表示关注,2表示曾经关注现在没关注
     */
    int selectAttentionRelationExist(@Param("user") User user,@Param("otherUser") User otherUser);

    /**
     * 插入新的关注关系信息
     * @param user          该用户
     * @param otherUser     指定用户
     * @return              0表示成功,1表示失败
     */
    int insertAttentionRelation(@Param("user") User user,@Param("otherUser") User otherUser);
    /**
     * 改变该用户对指定用户的关注状态
     * @param user          该用户
     * @param otherUser     指定用户
     * @return              0表示没成功，1表示成功改变
     */
    int updateAttentionRelation(@Param("user") User user,@Param("otherUser") User otherUser,@Param("status")Integer status);

    /**
     * 根据用户信息查询其交易记录
     * @param user
     * @return
     */
    /*List<TradingRecord> selectTradingRecordByUser(@Param("user")User user);*/


}
